//package com.zmn.plat.admin.controller.area;
//
//import java.util.*;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.apache.shiro.authz.annotation.RequiresPermissions;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.servlet.ModelAndView;
//
//import com.google.common.collect.Maps;
//import com.zmn.common.constant.GlobalConsts;
//import com.zmn.common.utils.number.NumberUtil;
//import com.zmn.common.utils.response.ResponseUtil;
//import com.zmn.common.utils.string.StringUtil;
//import com.zmn.plat.common.constant.BaseAreaConsts;
//import com.zmn.plat.model.entity.area.AreaQuery;
//import com.zmn.plat.model.entity.area.BaseArea;
//import com.zmn.plat.model.entity.part.PartSkuQuery;
//import com.zmn.plat.model.vo.part.PartSkuVO;
//import com.zmn.plat.services.interfaces.part.PartSkuService;
//
///**
// * @author duanzuocai
// * @version v1.0
// * @类说明：区域查询器
// * @since 2018/11/1 9:12
// */
//@Controller
//@RequestMapping("/area/")
//public class AreaListController extends AreaBaseController {
//    private final Integer PROVINCE_LEVEL = 2;
//
//    @Resource
//    PartSkuService partSkuService;
//
//    /**
//     * region 区域列表
//     *
//     * @param query
//     * @return
//     */
//    @RequestMapping(value = "list")
//    @RequiresPermissions("/area/list.action")
//    public ModelAndView list(@ModelAttribute AreaQuery query) {
//
//        // TODO 数据权限测试代码
//        PartSkuQuery voquery = new PartSkuQuery();
//        voquery.setCategOneId(10390);
//        List<PartSkuVO> rel = partSkuService.listVOPageByQuery(voquery);
//
//        AreaQuery conditionQuery = new AreaQuery();
//        BeanUtils.copyProperties(query, conditionQuery);
//        BaseArea parent = query.getParentId() > GlobalConsts.TOP_ID ? areaService.findByKey(query.getParentId()) : new BaseArea();
//        if (parent.getParentId() == null && StringUtil.isBlank(conditionQuery.getNameOrAreaId())) {
//            conditionQuery.setLevel(PROVINCE_LEVEL);
//        } else if (parent.getParentId() != null && StringUtil.isNotBlank(conditionQuery.getNameOrAreaId())) {
//            Integer parentPrefix = parent.getAreaId();
//            if (parent.getAreaId() % 10000 == 0) {
//                parentPrefix = parent.getAreaId() / 10000;
//            } else if (parent.getAreaId() % 100 == 0) {
//                parentPrefix = parent.getAreaId() / 100;
//            }
//            conditionQuery.setParentId(0);
//            conditionQuery.setParentPrefix(parentPrefix.toString());
//        }
//        List<BaseArea> items = areaService.listPageByQuery(conditionQuery);
//        query.setTotalCount(conditionQuery.getTotalCount());
//        ModelAndView mav = new ModelAndView("area/list");
//        mav.addObject("items", items);
//        mav.addObject("vo", query);
//        mav.addObject("parent", parent);
//
//        List<BaseArea> baseAreas = new ArrayList<>();
//        Integer parentId = query.getParentId();
//        // 后续是否能优化到缓存中
//        while (parentId != null && parentId != 0) {
//            BaseArea baseArea = areaService.findByKey(parentId);
//            parentId = 0;
//            if (!Objects.isNull(baseArea)) {
//                baseAreas.add(0, baseArea);
//                parentId = baseArea.getParentId();
//            }
//        }
//        mav.addObject("baseAreas", baseAreas);
//        return mav;
//    }
//
//    /**
//     * region 区域详情
//     *
//     * @param areaId
//     * @param parentId
//     * @return
//     */
//    @RequestMapping("detail")
//    @RequiresPermissions("/area/detail.action")
//    public ModelAndView detail(@RequestParam(value = "areaId", defaultValue = "0") int areaId,
//        @RequestParam(value = "parentId", defaultValue = "1") int parentId) {
//
//        int defaultSort = 5000;
//        BaseArea area = areaId > 0 ? areaService.findByKey(areaId) : new BaseArea();
//        if (areaId == 0) {
//            area.setParentId(parentId);
//            area.setSort(defaultSort);
//        }
//        BaseArea parent = area.getParentId() > GlobalConsts.TOP_ID ? areaService.findByKey(area.getParentId())
//            : new BaseArea(1, "中国", GlobalConsts.LEVEL_1);
//
//        List<BaseArea> citys = Collections.emptyList();
//        if (NumberUtil.isPositiveInteger(area.getLevel()) && NumberUtil.isPositiveInteger(area.getType())
//            && area.getLevel().equals(BaseAreaConsts.AREA_LEVEL_THREE) && area.getType().equals(BaseAreaConsts.TYPE_SUP_CITY)) {
//            AreaQuery query = new AreaQuery();
//            query.setParentId(area.getParentId());
//            query.setType(BaseAreaConsts.TYPE_NORMOL_CITY);
//            citys = areaService.listByQuery(query);
//        }
//
//        ModelAndView mav = new ModelAndView("area/detail");
//        mav.addObject("area", area);
//        mav.addObject("parent", parent);
//        mav.addObject("citys", citys);
//
//        return mav;
//    }
//
//    /**
//     * region 获取子区域数据
//     *
//     * @param parentId
//     * @return
//     */
//    @RequestMapping(value = "areas", method = RequestMethod.GET)
//    @ResponseBody
//    public List<BaseArea> areas(@RequestParam(value = "parentId", defaultValue = "1") int parentId) {
//        List<BaseArea> areas = areaService.listByParentId(parentId);
//        return areas;
//    }
//
//    /**
//     * region 获取子区域数据及当前区域
//     *
//     * @param parentId
//     * @return
//     */
//    @RequestMapping(value = "listChilds", method = RequestMethod.GET)
//    @ResponseBody
//    public Map<String, Object> listChilds(@RequestParam(value = "parentId", defaultValue = "1") int parentId) {
//        List<BaseArea> childs = areaService.listByParentId(parentId);
//        BaseArea area = areaService.findByKey(parentId);
//        HashMap<String, Object> areaMap = Maps.newHashMap();
//        areaMap.put("area", area);
//        areaMap.put("childs", childs);
//        return areaMap;
//    }
//
//    /**
//     * 描述：分类联动（服务分类查询一级产品分类）
//     *
//     * @param parentId
//     *            服务分类
//     */
//    @RequestMapping(value = "listCityList")
//    public void listChilds(HttpServletRequest request, HttpServletResponse response,
//        @RequestParam(value = "parentId", defaultValue = "1") int parentId) {
//        if (parentId == 0) {
//            ResponseUtil.outWrite(response, "[]");
//            return;
//        }
//
//        AreaQuery query = new AreaQuery();
//        query.setParentId(parentId);
//        query.setType(BaseAreaConsts.TYPE_NORMOL_CITY);
//        List<BaseArea> items = areaService.listByQuery(query);
//        StringBuilder sb = new StringBuilder("[");
//        String jsonFormat = "[\"%s\",\"%s\"]%s ";
//
//        for (int i = 0; i < items.size(); i++) {
//            BaseArea item = items.get(i);
//            sb.append(String.format(jsonFormat, item.getAreaId(), item.getName(), (i == items.size() - 1 ? "" : ",")));
//        }
//        sb.append("]");
//
//        ResponseUtil.outWrite(response, sb.toString());
//    }
//
//}
